<?php
/* FUNCIONES Y METODOS DE USO GENERAL Y TRANSVERSAL DE FIRST TUESDAY */

/* Anexa el CSS y los scripts de Javascript al header y footer de las paginas */

function FT_Agregar_CSS_JS($styles = array(), $scripts = array()) {
	
	// Anexa el o los CSS al header de las paginas
	if(!empty($styles)) :
		foreach($styles as $css) :
			wp_enqueue_style($css['nombre'], $css['src'], $css['dependencia'], false, 'screen');
		endforeach;
	endif;
	
	// Anexa el o los scripts de Javascript al footer de las paginas
	if(!empty($scripts)) :
		foreach($scripts as $js) :
			wp_enqueue_script($js['nombre'], $js['src'], $js['dependencia'], false, true);
		endforeach;
	endif;
}

/* Identifica y devuelve el objeto (sitio, blog o usuario) y sus parametros a los cuales hace referencia la cadena */

function FT_Obj($cadena, $glob = true) {
	global $ft, $ft_objs, $ft_obj;
	
	$obj_names = FT_Explode($cadena, '-');
	
	if($obj_names[0] == 'site' && $obj_names[1] == 'blogs')
		$obj_name = $obj_names[0].'-'.$obj_names[1];
	elseif($obj_names[0] == 'blog' && $obj_names[1] == 'users')
		$obj_name = $obj_names[0].'-'.$obj_names[1];
	elseif($obj_names[0] == 'user' && ($obj_names[1] == 'contacts' || $obj_names[1] == 'contact' || $obj_names[1] == 'blogs' || $obj_names[1] == 'blog'))
		$obj_name = $obj_names[0].'-'.$obj_names[1];
	else
		$obj_name = $obj_names[0];
		
	$obj_param = substr($cadena, strlen($obj_name)+1);
		
	switch($obj_name) :
		case 'site' :
			if(!empty($obj_param))
				return array($ft, $obj_param);
			else
				return $ft;
			break;
		case 'site-blogs' :
			if(isset($ft_objs) && is_array($ft_objs) && get_class(current($ft_objs)) == 'FT_Blog' && $glob)
				return $ft_objs;
			else
				return $ft->FT_Get_Blogs();
			break;
		case 'blog' :
			if(isset($ft_obj) && get_class($ft_obj) == 'FT_Blog' && $glob) :
				if(!empty($obj_param))
					return array($ft_obj, $obj_param);
				else
					return $ft_obj;
			else :
				if(!empty($obj_param))
					return array($ft->FT_Get_Current_Blog(), $obj_param);
				else
					return $ft->FT_Get_Current_Blog();
			endif;
			break;
		case 'blog-users' :
			if(isset($ft_objs) && is_array($ft_objs) && get_class(current($ft_objs)) == 'FT_User' && $glob)
				return $ft_objs;
			else
				return $ft->FT_Get_Current_Blog()->FT_Get_Users();
			break;
		case 'blog-cats' :
			if(isset($ft_objs) && is_array($ft_objs) && get_class(current($ft_objs)) == 'FT_Cats' && $glob)
				return $ft_objs;
			else
				return $ft->FT_Get_Current_Blog()->FT_Get_Cats();
			break;
		case 'user' :
			if(isset($ft_obj) && get_class($ft_obj) == 'FT_User' && $glob) :
				if(!empty($obj_param))
					return array($ft_obj, $obj_param);
				else
					return $ft_obj;
			else :
				if(!empty($obj_param))
					return array($ft->FT_Get_Current_Blog()->FT_Get_Current_User(), $obj_param);
				else
					return $ft->FT_Get_Current_Blog()->FT_Get_Current_User();
			endif;
			break;
		case 'user-contacts' :
			if(isset($ft_objs) && is_array($ft_objs) && get_class(current($ft_objs)) == 'FT_User' && $glob)
				return $ft_objs;
			else
				return $ft->FT_Get_Current_Blog()->FT_Get_Current_User()->FT_Get_Contacts();
			break;
		case 'user-contact' :
			if(isset($ft_obj) && get_class($ft_obj) == 'FT_User' && $glob) :
				if(!empty($obj_param))
					return array($ft_obj, $obj_param);
				else
					return $ft_obj;
			else :
				if(!empty($obj_param))
					return array($ft->FT_Get_Current_Blog()->FT_Get_Current_User(), $obj_param);
				else
					return $ft->FT_Get_Current_Blog()->FT_Get_Current_User();
			endif;
			break;
		case 'user-blog' :
			if(isset($ft_obj) && get_class($ft_obj) == 'FT_Blog' && $glob) :
				if(!empty($obj_param))
					return array($ft_obj, $obj_param);
				else
					return $ft_obj;
			else :
				if(!empty($obj_param))
					return array($ft->FT_Get_Current_Blog(), $obj_param);
				else
					return $ft->FT_Get_Current_Blog();
			endif;
			break;
		case 'user-blogs' :
			if(isset($ft_objs) && is_array($ft_objs) && get_class(current($ft_objs)) == 'FT_Blog' && $glob)
				$ft_objs;
			else
				return $ft->FT_Get_Current_Blog()->FT_Get_Current_User()->FT_Get_Blogs();
			break;
		case 'cat' :
			if(isset($ft_obj) && get_class($ft_obj) == 'FT_Cat' && $glob) :
				if(!empty($obj_param))
					return array($ft_obj, $obj_param);
				else
					return $ft_obj;
			else :
				if(!empty($obj_param))
					return array($ft->FT_Get_Current_Blog()->FT_Get_Current_Cat(), $obj_param);
				else
					return $ft->FT_Get_Current_Blog()->FT_Get_Current_Cat();
			endif;
			break;
		case 'post' :
			if(isset($ft_obj) && get_class($ft_obj) == 'FT_Post' && $glob) :
				if(!empty($obj_param))
					return array($ft_obj, $obj_param);
				else
					return $ft_obj;
			else :
				if(!empty($obj_param))
					return array($ft->FT_Get_Current_Blog()->FT_Get_Current_Cat()->FT_Get_Current_Post(), $obj_param);
				else
					return $ft->FT_Get_Current_Blog()->FT_Get_Current_Cat()->FT_Get_Current_Post();
			endif;
			break;
	endswitch;
}

/* Imprime o devuelve info sobre el sitio, el blog (ciudad) actual, el usuario actual, el contacto del usuario actual, o el blog (ciudad) del usuario actual */

function FT_Info($info_name = '', $echo = true) {
	// Obtiene el objeto que indica la cadena y sus parametros respectivos
	$obj_aux = FT_Obj($info_name);
	
	if(is_array($obj_aux)) :
		$obj = $obj_aux[0];
		$param = $obj_aux[1];
	else :
		$obj = $obj_aux;
	endif;
	
	if(is_object($obj)) :
		$obj_info = $obj->FT_Get_Info($param);	
		
		if((!is_string($obj_info) && !is_numeric($obj_info)) || !$echo) :
			return $obj_info;
		else :
			echo $obj_info;
			return;
		endif;
	endif;
}

/* Imprime o devuelve la URL sobre el sitio, el blog (ciudad) actual, el usuario actual, el contacto del usuario actual, o el blog (ciudad) del usuario actual */

function FT_URL($url_name = '', $echo = true) {
	// Obtiene el objeto que indica la cadena y sus parametros respectivos
	$obj_aux = FT_Obj($url_name);
	
	if(is_array($obj_aux)) :
		$obj = $obj_aux[0];
		$param = $obj_aux[1];
	else :
		$obj = $obj_aux;
	endif;
	
	if(is_object($obj)) :
		$obj_url = $obj->FT_Get_URL($param);	
		
		if((!is_string($obj_url) && !is_numeric($obj_url)) || !$echo) :
			return $obj_url;
		else :
			echo $obj_url;
			return;
		endif;
	endif;
}

/* Imprime o devuelve la URL de un tag en particular */

function FT_URL_Tag($tag_name, $obj_name = 'blog', $echo = true) {
	$tag_url = FT_URL($obj_name.'-'.BP_MEMBERS_SLUG, false).'?s='.$tag_name;
	
	if($echo) :
		echo $tag_url;
		return;
	else :
		return $tag_url; 
	endif;
}

/* Determina si la URL actual es o no una URL valida del sitio, blog (ciudad), usuario, contacto, etc. */

function FT_Es_URL($url_name = '') {
	// Obtiene el objeto que indica la cadena y sus parametros respectivos
	$obj_aux = FT_Obj($url_name);
	
	if(is_array($obj_aux)) :
		$obj = $obj_aux[0];
		$param = $obj_aux[1];
	else :
		$obj = $obj_aux;
	endif;
	
	if(is_object($obj)) :
		$obj_url = $obj->FT_Get_URL($param);
		
		$current_url = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
		
		return ($obj_url == $current_url || (strpos($current_url, $obj_url) !== false && $obj_url != $current_url));
	endif;
}

/* Genera un Loop con distintos objetos */

function FT_Hay_Objs($objs_name = '', $limit = null) {
	global $ft_objs, $ft_obj;
	
	if(!isset($ft_objs)) :
		$ft_objs = FT_Obj($objs_name);
	elseif(is_numeric($limit) && count($ft_objs) > $limit) :
		$ft_objs = array_slice($ft_objs, 0, $limit, true);
	endif;
		
	if(count($ft_objs) == 0) :
		$ft_objs = null;
		$ft_obj = null;
		return false;
	endif;
	
	return true;
}

function FT_El_Obj() {
	global $ft_objs, $ft_obj;
	
	$ft_obj = array_shift($ft_objs);
}

/* Determina si un usuario cualquiera es un contacto del usuario actual */

function FT_Es_Contacto($user_id = null) {
	$user = FT_Obj('user', false);
	
	if(isset($user) && $user->FT_Get_Info('current')) :
		$contacts = FT_Obj('user-contacts', false);
	
		if(is_null($user_id))
			$user_id = FT_Info('user-id', false);

		if(isset($contacts[$user_id]) || $user_id == $user->FT_Get_Info('id'))
			return true;
	endif;
	
	return false;
}
?>